package com.cgnpc.scp.hr.controller;

import com.cgnpc.cud.annotation.OperatorType;
import com.cgnpc.cud.annotation.UBA;
import com.cgnpc.cud.core.domain.AjaxResult;
import com.cgnpc.scp.common.bean.CreateFileInfo;
import com.cgnpc.scp.common.bean.MyPageResult;
import com.cgnpc.scp.common.utils.AjaxResultUtil;
import com.cgnpc.scp.hr.mybatis.entity.HrUserInfo;
import com.cgnpc.scp.hr.service.HrUserInfoService;
import com.cgnpc.scp.hse.controller.HseCheckOptionsConfigController;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**********************************
 * 用途说明: 调试人资管理 - 人员管理
 * 作者姓名: zhangyibing
 * 创建时间: 2020年10月16日22:30:34
 ***********************************/
@RestController
@RequestMapping("/scp/hr/userInfo")
public class HrUserInfoController {
    private static final Logger LOGGER = LoggerFactory.getLogger(HrUserInfoController.class);

    @Autowired
    private HrUserInfoService hrUserInfoService;

    @Autowired
    private MessageSource messageSource;

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 列表
     * 参数说明 params
     * 返回值说明: 列表
     ***********************************/
    @ApiOperation(value="调试人资管理 - 人员管理 - 列表")
    @UBA(module = "调试人资管理", action = "人员管理 - 列表", channel = OperatorType.Page)
    @RequestMapping(value = "/listPage", method = {RequestMethod.POST})
    public AjaxResult listPage(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            MyPageResult<HrUserInfo> result = hrUserInfoService.queryListPage(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("HrUserInfoController listPage error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 详情
     * 参数说明 params
     * 返回值说明: 详情
     ***********************************/
    @ApiOperation(value="调试人资管理 - 人员管理 - 详情")
    @UBA(module = "调试人资管理", action = "人员管理 - 详情", channel = OperatorType.Button)
    @RequestMapping(value = "/info", method = {RequestMethod.POST})
    public AjaxResult info(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            return hrUserInfoService.info(params.get("id")+"");
        } catch (Exception e) {
            LOGGER.error("HrUserInfoController info error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 删除
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="调试人资管理 - 人员管理 - 删除")
    @UBA(module = "调试人资管理", action = "人员管理 - 删除", channel = OperatorType.Button)
    @RequestMapping(value = "/delete", method = {RequestMethod.POST})
    public AjaxResult delete(HttpServletRequest request, @RequestBody List<String> ids) {
        try {
            return hrUserInfoService.delete(ids);
        } catch (Exception e) {
            LOGGER.error("HrUserInfoController delete error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 新增
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="调试人资管理 - 人员管理 - 新增")
    @UBA(module = "调试人资管理", action = "人员管理 - 新增", channel = OperatorType.Button)
    @RequestMapping(value = "/save", method = {RequestMethod.POST})
    public AjaxResult save(HttpServletRequest request, @RequestBody HrUserInfo hrUserInfo) {
        try {
            return hrUserInfoService.save(hrUserInfo);
        } catch (Exception e) {
            LOGGER.error("HrUserInfoController save error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 编辑
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="调试人资管理 - 人员管理 - 编辑")
    @UBA(module = "调试人资管理", action = "人员管理 - 编辑", channel = OperatorType.Button)
    @RequestMapping(value = "/update", method = {RequestMethod.POST})
    public AjaxResult update(HttpServletRequest request, @RequestBody HrUserInfo hrUserInfo) {
        try {
            return hrUserInfoService.update(hrUserInfo);
        } catch (Exception e) {
            LOGGER.error("HrUserInfoController update error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 导入
     * 参数说明: MultipartFile file
     * 返回值说明: AjaxResult
     ***********************************/
    @ApiOperation(value = "调试人资管理 - 人员管理 - 导入")
//    @UBA(module = "调试经营管理", action = "项目导入 Excel", channel = OperatorType.Button)
    @RequestMapping(value = "/importFromExcel", method = {RequestMethod.POST})
    @ResponseBody
    public AjaxResult importFromExcel(MultipartFile file) {
        try{
            boolean flag = hrUserInfoService.importFromExcel(file);
            if(flag){
                return AjaxResult.success();
            }else{
                return AjaxResult.error("批量导入失败，请检查");
            }
        }catch (Exception e){
            LOGGER.error("HrUserInfoController importFromExcel error : {}",e.getMessage(),e);
            return AjaxResult.error(e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试人资管理 - 人员管理 - 导出Excel
     * 参数说明: HttpServletRequest request, @RequestBody T reqEntity
     * 返回值说明: Object
     ***********************************/
    @ApiOperation(value = "调试人资管理 - 人员管理 - 导出Excel")
//    @UBA(module = "调试人资管理", action = "调试人资管理 - 人员管理 - 导出Excel", channel = OperatorType.Button)
    @RequestMapping(value = "/exportExcel", method = {RequestMethod.POST})
    @ResponseBody
    public Object exportExcel(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        AjaxResult ajaxResult = null;
        try {
            CreateFileInfo createFileInfo = hrUserInfoService.exportExcel(params);
            ajaxResult = AjaxResultUtil.createSuccessMessage(createFileInfo);
        } catch (Exception e) {
            LOGGER.error("exportExcel.error;", e);
            ajaxResult = AjaxResultUtil.createErrorMessage();
        }
        return ajaxResult;
    }

}
